package cn.jrainbow.base;

import java.io.Serializable;
import java.util.List;

/**
 * BaseDAO 定义DAO的通用操作
 * 
 * @author JRainbow 
 */
public interface IBaseDao<T ,PK extends Serializable> {
	/**  
     * 保存指定实体类  
     *   
     * @param entity 
     *            实体类  
     */  
	public void save(T entity);

	/**  
     * 更新或保存指定实体  
     *   
     * @param entity 实体类  
     */  
	public void update(T entity);
	
	/**  
     * 保存或更新指定实体类  
     *   
     * @param entity
     *            实体类  
     */  
	public void saveOrUpdate(T entity);

	 /**  
     * 删除指定实体  
     *   
     * @param entity
     *            实体类  
     */ 
	public void delete(T entity);
	
	
	/** 
     * 根据id删除一条记录 
     * @param id  
     *            ID 
     */ 
	public void deleteById(PK id);

	/**  
     * 查找指定ID实体类对象  
     *   
     * @param clazz  
     *            实体Class  
     * @param id  
     *            实体ID  
     * @return 实体对象  
     */  
	public T findById(PK id);
	
	 /** 
     * 根据Hql语句查询记录数量
     * 
     * @param hql  
     *            hql
     * @return 
     */  
	public Long getTotal(String hql);

	 /** 
     * 根据Hql语句查询多条记录对象 
     * 
     * @param hql  
     *            hql
     * @return 
     */  
	public List<T> findByHql(String hql);

	 /**  
     * 查询指定HQL语句的分页数据集合  
     *   
     * @param hql  
     *            HQL语句  
     * @param start  
     *            开始记录号  
     * @param limit  
     *            最大记录号  
     * @return 分页数据集合  
     */ 
	public List<T> findByPage(final String hql, final Integer start,final Integer limit);
}
